<?php

// 重置手机号
// PUT member.resetMobile

namespace app\api\resource\member;
use think\Db;
use think\Loader;
use think\Session;

class ResetMobile
{
    // 方法
    public $_method = ['PUT'];
    // 前置
    public $_pre    = ['login','sms'];
    // 描述
    public $_description = '重置手机号';
    // 参数
    public $_param  = [
        'mobile'     => '原手机号',
        'new_mobile' => '新手机号',
    ];
    // 返回
    public $_return = [
        201 => '重置成功',
        400 => '非法重置',
        422 => '手机号已被使用',
        500 => '服务器异常',
    ];

    public function run(&$request)
    {
        $mobile    = $request->put('mobile/s','','trim');
        $newMobile = $request->put('new_mobile/s','','trim');

        $params = ['mobile'=>$mobile,'new_mobile'=>$newMobile];
        $validate = Loader::validate('Member');
        if ( !$validate->scene('resetMobile')->check($params) ) {
            $errMsg = $validate->getError();
            return [422,$errMsg];
        }

        $oMobile = Session::get('member.mobile');
        if ($oMobile != $mobile) return [400,'手机号被篡改'];

        $ret = Db::name('member')->where('mobile',$newMobile)->field('id')->find();
        if ( !is_null($ret) ) return [400,'手机号已被使用'];

        $memberId = Session::get('member.id');

        // 启动事务
        Db::startTrans();
        try{
            // 更新会员表记录
            Db::name('member')->where('id',$memberId)->update(['mobile'=>$newMobile]);
            // 更新会员信息表记录
            Db::name('member_info')->where('member_id',$memberId)->update(['mobile'=>$newMobile]);
            // 更新项目推送表表记录
            Db::name('project_push')->where('from_mobile',$mobile)->update(['from_mobile'=>$newMobile]);
            Db::name('project_push')->where('to_mobile',$mobile)->update(['to_mobile'=>$newMobile]);
            
            // 提交事务
            Db::commit();

            // 删除Session中短信码记录
            Session::delete('sms');

            return [ 201,[] ];  
        } catch (\Exception $e) {
            // 回滚事务
            Db::rollback();

            return 500;
        }
    }
}